{
  "cells": [
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "ZrwVQsM9TiUw"
      },
      "source": [
        "##### Copyright 2019 The TensorFlow Probability Authors.\n",
        "\n",
        "Licensed under the Apache License, Version 2.0 (the \"License\");"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "cellView": "form",
        "id": "CpDUTVKYTowI"
      },
      "outputs": [],
      "source": [
        "#@title Licensed under the Apache License, Version 2.0 (the \"License\"); { display-mode: \"form\" }\n",
        "# you may not use this file except in compliance with the License.\n",
        "# You may obtain a copy of the License at\n",
        "#\n",
        "# https://www.apache.org/licenses/LICENSE-2.0\n",
        "#\n",
        "# Unless required by applicable law or agreed to in writing, software\n",
        "# distributed under the License is distributed on an \"AS IS\" BASIS,\n",
        "# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n",
        "# See the License for the specific language governing permissions and\n",
        "# limitations under the License."
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "ltPJCG6pAUoc"
      },
      "source": [
        "# TFP Probabilistic Layers: Regression\n",
        "\n",
        "<table class=\"tfo-notebook-buttons\" align=\"left\">\n",
        "  <td>\n",
        "    <a target=\"_blank\" href=\"https://www.tensorflow.org/probability/examples/Probabilistic_Layers_Regression\"><img src=\"https://www.tensorflow.org/images/tf_logo_32px.png\" />View on TensorFlow.org</a>\n",
        "  </td>\n",
        "  <td>\n",
        "    <a target=\"_blank\" href=\"https://colab.research.google.com/github/tensorflow/probability/blob/master/tensorflow_probability/examples/jupyter_notebooks/Probabilistic_Layers_Regression.ipynb\"><img src=\"https://www.tensorflow.org/images/colab_logo_32px.png\" />Run in Google Colab</a>\n",
        "  </td>\n",
        "  <td>\n",
        "    <a target=\"_blank\" href=\"https://github.com/tensorflow/probability/blob/master/tensorflow_probability/examples/jupyter_notebooks/Probabilistic_Layers_Regression.ipynb\"><img src=\"https://www.tensorflow.org/images/GitHub-Mark-32px.png\" />View source on GitHub</a>\n",
        "  </td>\n",
        "  <td>\n",
        "    <a href=\"https://storage.googleapis.com/tensorflow_docs/probability/tensorflow_probability/examples/jupyter_notebooks/Probabilistic_Layers_Regression.ipynb\"><img src=\"https://www.tensorflow.org/images/download_logo_32px.png\" />Download notebook</a>\n",
        "  </td>\n",
        "</table>"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "WRVR-tGTR31S"
      },
      "source": [
        "In this example we show how to fit regression models using TFP's \"probabilistic layers.\""
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "uiR4-VOt9NFX"
      },
      "source": [
        "### Dependencies & Prerequisites\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "id": "kZ0MdF1j8WJf"
      },
      "outputs": [],
      "source": [
        "#@title Import { display-mode: \"form\" }\n",
        "\n",
        "\n",
        "from pprint import pprint\n",
        "import matplotlib.pyplot as plt\n",
        "import numpy as np\n",
        "import seaborn as sns\n",
        "\n",
        "import tensorflow.compat.v2 as tf\n",
        "tf.enable_v2_behavior()\n",
        "\n",
        "import tensorflow_probability as tfp\n",
        "\n",
        "sns.reset_defaults()\n",
        "#sns.set_style('whitegrid')\n",
        "#sns.set_context('talk')\n",
        "sns.set_context(context='talk',font_scale=0.7)\n",
        "\n",
        "%matplotlib inline\n",
        "\n",
        "tfd = tfp.distributions"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "7nnwjUdVoWN2"
      },
      "source": [
        "### Make things Fast!"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "2CK9RaDcoYPG"
      },
      "source": [
        "Before we dive in, let's make sure we're using a GPU for this demo.  \n",
        "\n",
        "To do this, select \"Runtime\" -> \"Change runtime type\" -> \"Hardware accelerator\" -> \"GPU\".\n",
        "\n",
        "The following snippet will verify that we have access to a GPU."
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 3,
      "metadata": {
        "id": "qP_4Xr8vpA42"
      },
      "outputs": [
        {
          "name": "stdout",
          "output_type": "stream",
          "text": [
            "WARNING: GPU device not found.\n"
          ]
        }
      ],
      "source": [
        "if tf.test.gpu_device_name() != '/device:GPU:0':\n",
        "  print('WARNING: GPU device not found.')\n",
        "else:\n",
        "  print('SUCCESS: Found GPU: {}'.format(tf.test.gpu_device_name()))"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "FJRBc_S0ppfE"
      },
      "source": [
        "Note: if for some reason you cannot access a GPU, this colab will still work. (Training will just take longer.)"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "xuqxMmryiduM"
      },
      "source": [
        "## Motivation"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "RtBLNF-tin2L"
      },
      "source": [
        "Wouldn't it be great if we could use TFP to specify a probabilistic model then simply minimize the negative log-likelihood, i.e.,"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "id": "3PFfNeJzifo7"
      },
      "outputs": [],
      "source": [
        "negloglik = lambda y, rv_y: -rv_y.log_prob(y)"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "cN4IP8n_jIvT"
      },
      "source": [
        "Well not only is it possible, but this colab shows how! (In context of linear regression problems.)"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "cellView": "form",
        "id": "5zCEYpzu7bDX"
      },
      "outputs": [],
      "source": [
        "#@title Synthesize dataset.\n",
        "w0 = 0.125\n",
        "b0 = 5.\n",
        "x_range = [-20, 60]\n",
        "\n",
        "def load_dataset(n=150, n_tst=150):\n",
        "  np.random.seed(43)\n",
        "  def s(x):\n",
        "    g = (x - x_range[0]) / (x_range[1] - x_range[0])\n",
        "    return 3 * (0.25 + g**2.)\n",
        "  x = (x_range[1] - x_range[0]) * np.random.rand(n) + x_range[0]\n",
        "  eps = np.random.randn(n) * s(x)\n",
        "  y = (w0 * x * (1. + np.sin(x)) + b0) + eps\n",
        "  x = x[..., np.newaxis]\n",
        "  x_tst = np.linspace(*x_range, num=n_tst).astype(np.float32)\n",
        "  x_tst = x_tst[..., np.newaxis]\n",
        "  return y, x, x_tst\n",
        "\n",
        "y, x, x_tst = load_dataset()"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "N8Shtn_e99XC"
      },
      "source": [
        "### Case 1: No Uncertainty"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 6,
      "metadata": {
        "id": "RxKJ_RPI0K4N"
      },
      "outputs": [
        {
          "name": "stdout",
          "output_type": "stream",
          "text": [
            "0.13032457\n",
            "5.13029\n"
          ]
        }
      ],
      "source": [
        "# Build model.\n",
        "model = tf.keras.Sequential([\n",
        "  tf.keras.layers.Dense(1),\n",
        "  tfp.layers.DistributionLambda(lambda t: tfd.Normal(loc=t, scale=1)),\n",
        "])\n",
        "\n",
        "# Do inference.\n",
        "model.compile(optimizer=tf.optimizers.Adam(learning_rate=0.01), loss=negloglik)\n",
        "model.fit(x, y, epochs=1000, verbose=False);\n",
        "\n",
        "# Profit.\n",
        "[print(np.squeeze(w.numpy())) for w in model.weights];\n",
        "yhat = model(x_tst)\n",
        "assert isinstance(yhat, tfd.Distribution)"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 7,
      "metadata": {
        "cellView": "form",
        "id": "1AE9ElaKI6Er"
      },
      "outputs": [
        {
          "data": {
            "image/png": "iVBORw0KGgoAAAANSUhEUgAAAdsAAACCCAYAAAAOjGK/AAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4zLCBo\ndHRwOi8vbWF0cGxvdGxpYi5vcmcvnQurowAAIABJREFUeJztnXt8VNW593+Z3CZkkgkkgUAwIUCE\nDGjfIhdREUFQVKBatWIFgjeoeKQHL3i0RRRaK9TaAkoF3oIvOUUOYhWwgnh6UHkFLwEKwoRrAuGS\ngFIICUwmyeR3/tjMMDOZJHPZe/ZMeL6fz/5MsmfvtZ+9Zmb99rPWs54VQ5IQBEEQBEEzDHobIAiC\nIAhtHRFbQRAEQdAYEVtBEARB0BgRW0EQBEHQGBFbQRAEQdAYEVtBEARB0BgRW0EQBEHQGBFbQRAE\nQdAYEVtBEARB0BgRW0EQBEHQGBFbQRAEQdAYEVtBEARB0BgRW0EQBEHQGBFbQRAEQdAYEdsoIjc3\nF7m5uXqbIQiCIASIiG0UUVVVhaqqKr3NENoQlZVAu3ZATMzlrV07ZX8wbNsGmM2e5ZlMQHKy5760\nNOVYtWyOiQGefjp4uwVBa0RsBeEKpqwMiI/33JeQoOwPhrw8oL7ec5/DATQ2eu6rq1OODYasLGDx\nYiApCUhJUexdsACYMUOxWwRXiEREbAXhCsaXOKolhGaz8rpkibK571u8WDk2WCZMAEpLgU8+AY4e\nVTzl7t2BUaOU16Ki4MsGFMHetk2EW1CPGJLU2wjBP9LS0gAA586d09kSIdqprFS8wLw84NNPgSlT\nFA+xrk4RwgkT1CvfKaq+9qlVbvfugM12+bikJEWMg7lOUZFSH/HxyoOIGvUhCCK2UYSIraAGvsRk\n5MjQhVBrmhPBbdsUj/b8+cvHms3Ahg3A4MGBXUNt4RYEJyK2UYSIrRAq0SomLdkNqHdPagq3ILgj\nY7YqMGvWLFgsFhgMBqxatcq1/5133kFcXBxMJpNrKy8v19FS4UpH7YCocNGS3VlZTbt5J0wI7uFB\n7TFsQXAiYqsC+fn5mD9/PgYOHNjkvREjRqCmpsa15eTk6GChIChEq5i0ZHdlZdOAqKKi4IKbfAV4\nhRrMJQiAiK0qjB8/HiNHjoTRaAypnLS0tBY3mWMrhEq0iklLdqvtrTsjnTdsUF4lOEpQgzi9DWjr\n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\n",
            "text/plain": [
              "<Figure size 600x150 with 1 Axes>"
            ]
          },
          "metadata": {
            "tags": []
          },
          "output_type": "display_data"
        }
      ],
      "source": [
        "#@title Figure 1: No uncertainty.\n",
        "w = np.squeeze(model.layers[-2].kernel.numpy())\n",
        "b = np.squeeze(model.layers[-2].bias.numpy())\n",
        "\n",
        "plt.figure(figsize=[6, 1.5])  # inches\n",
        "#plt.figure(figsize=[8, 5])  # inches\n",
        "plt.plot(x, y, 'b.', label='observed');\n",
        "plt.plot(x_tst, yhat.mean(),'r', label='mean', linewidth=4);\n",
        "plt.ylim(-0.,17);\n",
        "plt.yticks(np.linspace(0, 15, 4)[1:]);\n",
        "plt.xticks(np.linspace(*x_range, num=9));\n",
        "\n",
        "ax=plt.gca();\n",
        "ax.xaxis.set_ticks_position('bottom')\n",
        "ax.yaxis.set_ticks_position('left')\n",
        "ax.spines['left'].set_position(('data', 0))\n",
        "ax.spines['top'].set_visible(False)\n",
        "ax.spines['right'].set_visible(False)\n",
        "#ax.spines['left'].set_smart_bounds(True)\n",
        "#ax.spines['bottom'].set_smart_bounds(True)\n",
        "plt.legend(loc='center left', fancybox=True, framealpha=0., bbox_to_anchor=(1.05, 0.5))\n",
        "\n",
        "plt.savefig('/tmp/fig1.png', bbox_inches='tight', dpi=300)"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "91kwRqs4O5Yv"
      },
      "source": [
        "### Case 2: Aleatoric Uncertainty"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 8,
      "metadata": {
        "id": "TLZ97_V4PP-f"
      },
      "outputs": [
        {
          "name": "stdout",
          "output_type": "stream",
          "text": [
            "[0.14738432 0.1815331 ]\n",
            "[4.4812164 1.2219843]\n"
          ]
        }
      ],
      "source": [
        "# Build model.\n",
        "model = tf.keras.Sequential([\n",
        "  tf.keras.layers.Dense(1 + 1),\n",
        "  tfp.layers.DistributionLambda(\n",
        "      lambda t: tfd.Normal(loc=t[..., :1],\n",
        "                           scale=1e-3 + tf.math.softplus(0.05 * t[...,1:]))),\n",
        "])\n",
        "\n",
        "# Do inference.\n",
        "model.compile(optimizer=tf.optimizers.Adam(learning_rate=0.01), loss=negloglik)\n",
        "model.fit(x, y, epochs=1000, verbose=False);\n",
        "\n",
        "# Profit.\n",
        "[print(np.squeeze(w.numpy())) for w in model.weights];\n",
        "yhat = model(x_tst)\n",
        "assert isinstance(yhat, tfd.Distribution)"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 9,
      "metadata": {
        "cellView": "form",
        "id": "JSSWw2-FPCiG"
      },
      "outputs": [
        {
          "data": {
            "image/png": "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\nAElFTkSuQmCC\n",
            "text/plain": [
              "<Figure size 600x150 with 1 Axes>"
            ]
          },
          "metadata": {
            "tags": []
          },
          "output_type": "display_data"
        }
      ],
      "source": [
        "#@title Figure 2: Aleatoric Uncertainty\n",
        "plt.figure(figsize=[6, 1.5])  # inches\n",
        "plt.plot(x, y, 'b.', label='observed');\n",
        "\n",
        "m = yhat.mean()\n",
        "s = yhat.stddev()\n",
        "\n",
        "plt.plot(x_tst, m, 'r', linewidth=4, label='mean');\n",
        "plt.plot(x_tst, m + 2 * s, 'g', linewidth=2, label=r'mean + 2 stddev');\n",
        "plt.plot(x_tst, m - 2 * s, 'g', linewidth=2, label=r'mean - 2 stddev');\n",
        "\n",
        "plt.ylim(-0.,17);\n",
        "plt.yticks(np.linspace(0, 15, 4)[1:]);\n",
        "plt.xticks(np.linspace(*x_range, num=9));\n",
        "\n",
        "ax=plt.gca();\n",
        "ax.xaxis.set_ticks_position('bottom')\n",
        "ax.yaxis.set_ticks_position('left')\n",
        "ax.spines['left'].set_position(('data', 0))\n",
        "ax.spines['top'].set_visible(False)\n",
        "ax.spines['right'].set_visible(False)\n",
        "#ax.spines['left'].set_smart_bounds(True)\n",
        "#ax.spines['bottom'].set_smart_bounds(True)\n",
        "plt.legend(loc='center left', fancybox=True, framealpha=0., bbox_to_anchor=(1.05, 0.5))\n",
        "\n",
        "plt.savefig('/tmp/fig2.png', bbox_inches='tight', dpi=300)"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "xEvTd7ZJYvDx"
      },
      "source": [
        "### Case 3: Epistemic Uncertainty"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "cellView": "both",
        "id": "VwzbWw3_CQ2z"
      },
      "outputs": [],
      "source": [
        "# Specify the surrogate posterior over `keras.layers.Dense` `kernel` and `bias`.\n",
        "def posterior_mean_field(kernel_size, bias_size=0, dtype=None):\n",
        "  n = kernel_size + bias_size\n",
        "  c = np.log(np.expm1(1.))\n",
        "  return tf.keras.Sequential([\n",
        "      tfp.layers.VariableLayer(2 * n, dtype=dtype),\n",
        "      tfp.layers.DistributionLambda(lambda t: tfd.Independent(\n",
        "          tfd.Normal(loc=t[..., :n],\n",
        "                     scale=1e-5 + tf.nn.softplus(c + t[..., n:])),\n",
        "          reinterpreted_batch_ndims=1)),\n",
        "  ])"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "cellView": "both",
        "id": "aAQhyK9Y_lm1"
      },
      "outputs": [],
      "source": [
        "# Specify the prior over `keras.layers.Dense` `kernel` and `bias`.\n",
        "def prior_trainable(kernel_size, bias_size=0, dtype=None):\n",
        "  n = kernel_size + bias_size\n",
        "  return tf.keras.Sequential([\n",
        "      tfp.layers.VariableLayer(n, dtype=dtype),\n",
        "      tfp.layers.DistributionLambda(lambda t: tfd.Independent(\n",
        "          tfd.Normal(loc=t, scale=1),\n",
        "          reinterpreted_batch_ndims=1)),\n",
        "  ])"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 12,
      "metadata": {
        "id": "XI7ZCFzSnrWN"
      },
      "outputs": [
        {
          "name": "stdout",
          "output_type": "stream",
          "text": [
            "[ 0.1387333  5.125723  -4.112224  -2.2171402]\n",
            "[0.12476114 5.147452  ]\n"
          ]
        }
      ],
      "source": [
        "# Build model.\n",
        "model = tf.keras.Sequential([\n",
        "  tfp.layers.DenseVariational(1, posterior_mean_field, prior_trainable, kl_weight=1/x.shape[0]),\n",
        "  tfp.layers.DistributionLambda(lambda t: tfd.Normal(loc=t, scale=1)),\n",
        "])\n",
        "\n",
        "# Do inference.\n",
        "model.compile(optimizer=tf.optimizers.Adam(learning_rate=0.01), loss=negloglik)\n",
        "model.fit(x, y, epochs=1000, verbose=False);\n",
        "\n",
        "# Profit.\n",
        "[print(np.squeeze(w.numpy())) for w in model.weights];\n",
        "yhat = model(x_tst)\n",
        "assert isinstance(yhat, tfd.Distribution)"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 13,
      "metadata": {
        "cellView": "form",
        "id": "Y4Bypix9UvTO"
      },
      "outputs": [
        {
          "data": {
            "image/png": "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\nAElFTkSuQmCC\n",
            "text/plain": [
              "<Figure size 600x150 with 1 Axes>"
            ]
          },
          "metadata": {
            "tags": []
          },
          "output_type": "display_data"
        }
      ],
      "source": [
        "#@title Figure 3: Epistemic Uncertainty\n",
        "plt.figure(figsize=[6, 1.5])  # inches\n",
        "plt.clf();\n",
        "plt.plot(x, y, 'b.', label='observed');\n",
        "\n",
        "yhats = [model(x_tst) for _ in range(100)]\n",
        "avgm = np.zeros_like(x_tst[..., 0])\n",
        "for i, yhat in enumerate(yhats):\n",
        "  m = np.squeeze(yhat.mean())\n",
        "  s = np.squeeze(yhat.stddev())\n",
        "  if i < 25:\n",
        "    plt.plot(x_tst, m, 'r', label='ensemble means' if i == 0 else None, linewidth=0.5)\n",
        "  avgm += m\n",
        "plt.plot(x_tst, avgm/len(yhats), 'r', label='overall mean', linewidth=4)\n",
        "\n",
        "plt.ylim(-0.,17);\n",
        "plt.yticks(np.linspace(0, 15, 4)[1:]);\n",
        "plt.xticks(np.linspace(*x_range, num=9));\n",
        "\n",
        "ax=plt.gca();\n",
        "ax.xaxis.set_ticks_position('bottom')\n",
        "ax.yaxis.set_ticks_position('left')\n",
        "ax.spines['left'].set_position(('data', 0))\n",
        "ax.spines['top'].set_visible(False)\n",
        "ax.spines['right'].set_visible(False)\n",
        "#ax.spines['left'].set_smart_bounds(True)\n",
        "#ax.spines['bottom'].set_smart_bounds(True)\n",
        "plt.legend(loc='center left', fancybox=True, framealpha=0., bbox_to_anchor=(1.05, 0.5))\n",
        "\n",
        "plt.savefig('/tmp/fig3.png', bbox_inches='tight', dpi=300)"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "H_3At7s2fel0"
      },
      "source": [
        "### Case 4: Aleatoric & Epistemic Uncertainty"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 14,
      "metadata": {
        "id": "GcRC3uwcft6l"
      },
      "outputs": [
        {
          "name": "stdout",
          "output_type": "stream",
          "text": [
            "[ 0.12753433  2.7504077   5.160624    3.8251898  -3.4283297  -0.8961645\n",
            " -2.2378397   0.1496858 ]\n",
            "[0.14511648 2.7104297  5.1248145  3.7724588 ]\n"
          ]
        }
      ],
      "source": [
        "# Build model.\n",
        "model = tf.keras.Sequential([\n",
        "  tfp.layers.DenseVariational(1 + 1, posterior_mean_field, prior_trainable, kl_weight=1/x.shape[0]),\n",
        "  tfp.layers.DistributionLambda(\n",
        "      lambda t: tfd.Normal(loc=t[..., :1],\n",
        "                           scale=1e-3 + tf.math.softplus(0.01 * t[...,1:]))),\n",
        "])\n",
        "\n",
        "# Do inference.\n",
        "model.compile(optimizer=tf.optimizers.Adam(learning_rate=0.01), loss=negloglik)\n",
        "model.fit(x, y, epochs=1000, verbose=False);\n",
        "\n",
        "# Profit.\n",
        "[print(np.squeeze(w.numpy())) for w in model.weights];\n",
        "yhat = model(x_tst)\n",
        "assert isinstance(yhat, tfd.Distribution)"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 15,
      "metadata": {
        "cellView": "form",
        "id": "cWhfYYzcgFak"
      },
      "outputs": [
        {
          "data": {
            "image/png": "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\nLFki0tLSxMGDB8X+/ftFUlKSWLly5SWzy+l0iunTp4vc3Fzh9/vF3//+d9GsWbM6YduuXbuE2+0W\nQgixYcMGYbPZRFlZWcTtEkKIQCAgrr32WtGpUycxY8YMIUTk+6tnz5417q1qIm3XnDlzxA033CDy\n8vJEIBAQmzdvrhN2SSQSyblyyQXgycydO1cMHDhQCCGEw+EQOp1OFBQUhNtTU1PF119/fUltOnDg\nwCkCMJK21ZV+qebkh/Tw4cPFrFmzwp+feuopMXr06EiYJoQQwuPxCEVRRHFxcZ2ybcuWLcJoNIrt\n27fXCbtefvll8dBDD4m77rorLAAjbdfpBGAk7fL7/aJ+/foiKyurTtklkUgk50PEfQDXrFlD69at\nAdi7dy8xMTHUq1cv3N62bVt27twZKfPCRNK2utwvADt37qRNmzbhz5G2be3atdjtduLj4+uEbfff\nfz8mk4mrrrqKPn36kJ6eHnG7SkpKmDNnDk899VSN9ZG2C+CBBx4gMTGRvn37sm3btojblZubi9vt\nZv78+djtdtLT0/nggw8ibpdEIpGcD9pIHnzZsmV89tlnbN26FYDKykqsVmuNbaxWK06nMxLm1SCS\nttXlfoFT7YukbeXl5YwbN46//e1vdca2l19+mYyMDFatWsXOnTtRFCXidk2ePJmJEydis9lqrI+0\nXc899xzp6eloNBoyMjK4+eabyczMjKhdhw8fpry8nIKCAnJycti0aRP9+/enQ4cOEe8viUQiOVcu\n+Ahg//79ww7cJ7+ee+658HYbN25k7NixfPzxx+GRraioKCoqKmrsz+FwYLFYLqlttXGxbaurxz4T\nTrYvUra53W5uu+02Bg4cyN13312nbNNoNNxwww2sXLmSFStWRNSuzZs3s2XLFv7whz+c0hbp/rr2\n2muxWCyYTCYee+wxLBYLGzZsiKhdJpMJCIlmo9FI9+7duf766/n6668j3l8SiURyrlxwAfjpp5/i\ndDprfT322GMAZGZmcsstt/Dvf/+bzp07h7/bvHlzysrKKCwsDK/bvn076enpl8y203Gxbaurxz4T\n0tPT2b59e/hzJGwLBAL8/ve/Jzk5mdmzZ9cp204kEAiwf//+iNq1evVqdu7cid1uJyEhgf/+9788\n/fTT3H333XWuv1Q19C8qknY1b94cnU5Xa1td6y+JRCI5Yy6102FOTo5o1KiReOutt2ptv/3228Wf\n/vQn4XK5xOuvv37Jo11dLpfIzMwUBoNBuFyucARnpG2LdL8IIYTX6xUul0v06NFDvP3228LlcolA\nICCWLFkimjRpInJyckRWVpZITk6+5JGQY8aMETfeeOMpfRJJ2yoqKsT8+fNFRUWF8Pl84v333xcG\ng5SnCPMAAAGTSURBVEFs3bo14nbl5uaGX0OHDhWTJ08WJSUlEbWrrKxMrFy5UrjdbuHxeMQ//vEP\nUb9+feFwOCJ+jw0ZMkSMHz9eeL1esX79emG1WsW+ffsibpdEIpGcK5dcAP7lL38RiqKIqKio8Cs9\nPT3cXlBQIG644QZhNBpFmzZtxKZNmy6pfUCNV2pqap2wLdL9IoQQd9111yn9s2rVKiGEEH/9619F\nXFyciI+PFzNnzrykdmVnZwtAGI3GGvfVt99+G1HbnE6nuP7664XNZhNWq1VcddVV4qOPPgq3R7LP\nTuTEKOBI2nXkyBHRsWNHERUVJWJjY0Xv3r3FDz/8EHG7hBCiqKhIDBgwQERFRYnmzZuLRYsW1Qm7\nJBKJ5FxRhBAiYsOPEolEIpFIJJJLTsTTwEgkEolEIpFILi1SAEokEolEIpFcZkgBKJFIJBKJRHKZ\nIQWgRCKRSCQSyWWGFIASiUQikUgklxlSAEokEolEIpFcZkgBKJFIJBKJRHKZIQWgRCKRSCQSyWWG\nFIASiUQikUgklxn/D6t18WcrcH4SAAAAAElFTkSuQmCC\n",
            "text/plain": [
              "<Figure size 600x150 with 1 Axes>"
            ]
          },
          "metadata": {
            "tags": []
          },
          "output_type": "display_data"
        }
      ],
      "source": [
        "#@title Figure 4: Both Aleatoric & Epistemic Uncertainty\n",
        "plt.figure(figsize=[6, 1.5])  # inches\n",
        "plt.plot(x, y, 'b.', label='observed');\n",
        "\n",
        "yhats = [model(x_tst) for _ in range(100)]\n",
        "avgm = np.zeros_like(x_tst[..., 0])\n",
        "for i, yhat in enumerate(yhats):\n",
        "  m = np.squeeze(yhat.mean())\n",
        "  s = np.squeeze(yhat.stddev())\n",
        "  if i < 15:\n",
        "    plt.plot(x_tst, m, 'r', label='ensemble means' if i == 0 else None, linewidth=1.)\n",
        "    plt.plot(x_tst, m + 2 * s, 'g', linewidth=0.5, label='ensemble means + 2 ensemble stdev' if i == 0 else None);\n",
        "    plt.plot(x_tst, m - 2 * s, 'g', linewidth=0.5, label='ensemble means - 2 ensemble stdev' if i == 0 else None);\n",
        "  avgm += m\n",
        "plt.plot(x_tst, avgm/len(yhats), 'r', label='overall mean', linewidth=4)\n",
        "\n",
        "plt.ylim(-0.,17);\n",
        "plt.yticks(np.linspace(0, 15, 4)[1:]);\n",
        "plt.xticks(np.linspace(*x_range, num=9));\n",
        "\n",
        "ax=plt.gca();\n",
        "ax.xaxis.set_ticks_position('bottom')\n",
        "ax.yaxis.set_ticks_position('left')\n",
        "ax.spines['left'].set_position(('data', 0))\n",
        "ax.spines['top'].set_visible(False)\n",
        "ax.spines['right'].set_visible(False)\n",
        "#ax.spines['left'].set_smart_bounds(True)\n",
        "#ax.spines['bottom'].set_smart_bounds(True)\n",
        "plt.legend(loc='center left', fancybox=True, framealpha=0., bbox_to_anchor=(1.05, 0.5))\n",
        "\n",
        "plt.savefig('/tmp/fig4.png', bbox_inches='tight', dpi=300)"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "qmgmcmMKzOH7"
      },
      "source": [
        "### Case 5: Functional Uncertainty"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "cellView": "form",
        "id": "qtXVxLRdzHBn"
      },
      "outputs": [],
      "source": [
        "#@title Custom PSD Kernel\n",
        "class RBFKernelFn(tf.keras.layers.Layer):\n",
        "  def __init__(self, **kwargs):\n",
        "    super(RBFKernelFn, self).__init__(**kwargs)\n",
        "    dtype = kwargs.get('dtype', None)\n",
        "\n",
        "    self._amplitude = self.add_variable(\n",
        "            initializer=tf.constant_initializer(0),\n",
        "            dtype=dtype,\n",
        "            name='amplitude')\n",
        "    \n",
        "    self._length_scale = self.add_variable(\n",
        "            initializer=tf.constant_initializer(0),\n",
        "            dtype=dtype,\n",
        "            name='length_scale')\n",
        "\n",
        "  def call(self, x):\n",
        "    # Never called -- this is just a layer so it can hold variables\n",
        "    # in a way Keras understands.\n",
        "    return x\n",
        "\n",
        "  @property\n",
        "  def kernel(self):\n",
        "    return tfp.math.psd_kernels.ExponentiatedQuadratic(\n",
        "      amplitude=tf.nn.softplus(0.1 * self._amplitude),\n",
        "      length_scale=tf.nn.softplus(5. * self._length_scale)\n",
        "    )"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 17,
      "metadata": {
        "id": "_gJJtPMzzDyo"
      },
      "outputs": [],
      "source": [
        "# For numeric stability, set the default floating-point dtype to float64\n",
        "tf.keras.backend.set_floatx('float64')\n",
        "\n",
        "# Build model.\n",
        "num_inducing_points = 40\n",
        "model = tf.keras.Sequential([\n",
        "    tf.keras.layers.InputLayer(input_shape=[1]),\n",
        "    tf.keras.layers.Dense(1, kernel_initializer='ones', use_bias=False),\n",
        "    tfp.layers.VariationalGaussianProcess(\n",
        "        num_inducing_points=num_inducing_points,\n",
        "        kernel_provider=RBFKernelFn(),\n",
        "        event_shape=[1],\n",
        "        inducing_index_points_initializer=tf.constant_initializer(\n",
        "            np.linspace(*x_range, num=num_inducing_points,\n",
        "                        dtype=x.dtype)[..., np.newaxis]),\n",
        "        unconstrained_observation_noise_variance_initializer=(\n",
        "            tf.constant_initializer(np.array(0.54).astype(x.dtype))),\n",
        "    ),\n",
        "])\n",
        "\n",
        "# Do inference.\n",
        "batch_size = 32\n",
        "loss = lambda y, rv_y: rv_y.variational_loss(\n",
        "    y, kl_weight=np.array(batch_size, x.dtype) / x.shape[0])\n",
        "model.compile(optimizer=tf.optimizers.Adam(learning_rate=0.01), loss=loss)\n",
        "model.fit(x, y, batch_size=batch_size, epochs=1000, verbose=False)\n",
        "\n",
        "# Profit.\n",
        "yhat = model(x_tst)\n",
        "assert isinstance(yhat, tfd.Distribution)"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 18,
      "metadata": {
        "cellView": "form",
        "id": "Fp4qEWSRzc8m"
      },
      "outputs": [
        {
          "data": {
            "image/png": "iVBORw0KGgoAAAANSUhEUgAAAgkAAACCCAYAAADMilvKAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4zLCBo\ndHRwOi8vbWF0cGxvdGxpYi5vcmcvnQurowAAIABJREFUeJzsnXd4VFX6xz93WjLpjRBIpyc0KdJE\nQBQbthXLilJW3bUs9lXXtqvuurusa0VXWBUUFEWxIQhYkKI0QYQAgpSEBFKB9Ewy5b6/P05mUkib\ngD9E7ud55rmTmTPnnHvnZs573vO+36OJiGBgYGBgYGBg0AjTye6AgYGBgYGBwS8Tw0gwMDAwMDAw\naBLDSDAwMDAwMDBoEsNIMDAwMDAwMGgSw0gwMDAwMDAwaBLDSDAwMDAwMDBoEsNIMDAwMDAwMGgS\nw0gwMDAwMDAwaBLDSDAwMDAwMDBoEsNIMDAwMDAwMGgSw0gwMDAwMDAwaBLDSDAwMDAwMDBoEsNI\nMDAwMDAwMGgSw0gwMDAwMDAwaBLDSDiFSE5OJjk5+WR3w8DAwMDgNMEwEk4hSktLKS0tPdndMDjV\n+eorMJkgO5uitXvI1pL5RLuMf2sPoGkQFAT5+e2ret06eDHgflyala+0c3BrFnaZ0ggLclOjBXBY\ni0bTICJClW0P+fnwuuUW8rU4qrQgHFoA1VoAlYFR5O+val+l9UlKgk6dYPJkyMuDkBB1vebNg/vu\nO/76DQxOIQwjwcDgdGPhQjCbISmJfZ4U7JqDJHLoQBEANhtkZrav6tRU6OzOxoKb7ziTxYxH0IjR\nCykklkhKAHA6Vdn2EBcHF6ZlEUQVOSRhQcdksxIYbKbgmz3tNnAAEIGqKtA06NkTYmMhMFAZCXY7\nHDx4HJUbGJx6GEaCgcHpQmkpfPklfP45dOwIQEp3K+WE0plDPiPheAfw0Un7AdhrP4OD5lQYdz7z\nJn/OJm0IJnRSbQeZNUuVbS/xjn2ERFhJia3CYjPjCgqj/KiL52/dRZcuatLfLiorwWJBLynD87en\nKNqwH157DSwWdWEMI8HgNMMwEgwMThdefx0efhgOHaLi8ut97v6Avj0QTHQ25WO3c9wDeAdHDpjN\nPDY1h8mPJpJ2z4WcVbaMcff0QTQTP9w/n0mT2ld3fr5aptALD2OqriLgSC64XLhLKrBTRZJjFw4H\n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\naDSaNvl/gPlVr27ZpFgAAAAASUVORK5CYII=\n",
            "text/plain": [
              "<Figure size 600x150 with 1 Axes>"
            ]
          },
          "metadata": {
            "tags": []
          },
          "output_type": "display_data"
        }
      ],
      "source": [
        "#@title Figure 5: Functional Uncertainty\n",
        "\n",
        "y, x, _ = load_dataset()\n",
        "\n",
        "plt.figure(figsize=[6, 1.5])  # inches\n",
        "plt.plot(x, y, 'b.', label='observed');\n",
        "\n",
        "num_samples = 7\n",
        "for i in range(num_samples):\n",
        "  sample_ = yhat.sample().numpy()\n",
        "  plt.plot(x_tst,\n",
        "           sample_[..., 0].T,\n",
        "           'r',\n",
        "           linewidth=0.9,\n",
        "           label='ensemble means' if i == 0 else None);\n",
        "\n",
        "plt.ylim(-0.,17);\n",
        "plt.yticks(np.linspace(0, 15, 4)[1:]);\n",
        "plt.xticks(np.linspace(*x_range, num=9));\n",
        "\n",
        "ax=plt.gca();\n",
        "ax.xaxis.set_ticks_position('bottom')\n",
        "ax.yaxis.set_ticks_position('left')\n",
        "ax.spines['left'].set_position(('data', 0))\n",
        "ax.spines['top'].set_visible(False)\n",
        "ax.spines['right'].set_visible(False)\n",
        "#ax.spines['left'].set_smart_bounds(True)\n",
        "#ax.spines['bottom'].set_smart_bounds(True)\n",
        "plt.legend(loc='center left', fancybox=True, framealpha=0., bbox_to_anchor=(1.05, 0.5))\n",
        "\n",
        "plt.savefig('/tmp/fig5.png', bbox_inches='tight', dpi=300)"
      ]
    }
  ],
  "metadata": {
    "colab": {
      "collapsed_sections": [],
      "name": "Probabilistic_Layers_Regression.ipynb",
      "toc_visible": true
    },
    "kernelspec": {
      "display_name": "Python 3",
      "name": "python3"
    }
  },
  "nbformat": 4,
  "nbformat_minor": 0
}
